package io.sage.ch06.methodrefactoring;

/**
 * 6.7 Remove Assignments to Parameters 移除对参数的赋值
 * 问题场景：代码对一个参数进行赋值
 * 重构思路：以一个临时变量取代该参数的位置
 * 做法：
 * 1）建立一个临时变量，把待处理的参数值赋予它。
 * 2）以“对参数的赋值”为界，将其后所有对此参数的引用点，全部替换为“对此临时变量的引用”
 * 3）修改赋值语句，使其改为对新建的临时变量赋值。
 * 4）编译，测试
 */
public class RemoveAssignmentstoParameters {

    /**
     * 重构前
     *
     * @param inputVal
     * @param quantity
     * @param yearToDate
     * @return
     */
    int discount(int inputVal, int quantity, int yearToDate) {
        if (inputVal > 50) {
            inputVal -= 2;
        }
        if (quantity > 100) {
            inputVal -= 1;
        }
        if (yearToDate > 10000) {
            inputVal -= 4;
        }
        return inputVal;
    }

    /**
     * 重构后
     */
    int discount_new(int inputVal, int quantity, int yearToDate) {
        int result = inputVal;
        if (inputVal > 50) {
            result -= 2;
        }
        if (quantity > 100) {
            result -= 1;
        }
        if (yearToDate > 10000) {
            result -= 4;
        }
        return result;
    }
}
